package com.zdp.jpa.test.entity;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author ZhengDp
 * @Date 2024/5/14 21:20
 */
@Data
@Table(name = "membercardorder")
@Entity
public class MemberCardOrder {
    @Id
    private String id;
    private String num;
    private String buyerId;
    private Integer payType;
    private Integer sourceType;
    private Integer payStatus;
    private Integer status;
    private Integer price;
    private Integer priceGuide;
    private String ruleId;
    private Long timeCreate;
    private Long timePay;
    private Long timeStart;
    private Long timeEnd;
    private Long timeUpdate;
    private String userIdUpdate;
    private Long timeSendOut;
    private String transactionId;
    private Integer pageSource;

    public static MemberCardOrder generateRandomOrder() {
        MemberCardOrder order = new MemberCardOrder();
        order.setId(UUID.randomUUID().toString()); // 生成随机的 UUID 作为订单 ID
        order.setNum(generateRandomString(8)); // 生成随机的 8 位字符串作为订单编号
        order.setBuyerId(UUID.randomUUID().toString()); // 生成随机的 UUID 作为买家 ID
        order.setPayType(ThreadLocalRandom.current().nextInt(1, 4)); // 随机生成支付类型（假设支付类型为 1、2、3）
        order.setSourceType(ThreadLocalRandom.current().nextInt(1, 4)); // 随机生成订单来源类型（假设来源类型为 1、2、3）
        order.setPayStatus(ThreadLocalRandom.current().nextInt(2)); // 随机生成支付状态（假设支付状态为 0 或 1）
        order.setStatus(ThreadLocalRandom.current().nextInt(2)); // 随机生成订单状态（假设订单状态为 0 或 1）
        order.setPrice(ThreadLocalRandom.current().nextInt(100, 1000)); // 随机生成价格（假设价格范围为 100 到 1000）
        order.setPriceGuide(ThreadLocalRandom.current().nextInt(100, 1000)); // 随机生成价格指导（假设价格指导范围为 100 到 1000）
        //order.setRuleIdeId(UUID.randomUUID().toString()); // 生成随机的 UUID 作为规则 ID
        order.setTimeCreate(ThreadLocalRandom.current().nextLong(1709222400000L,1715702399000L)); // 设置订单创建时间为当前时间戳
        order.setTimePay(System.currentTimeMillis() + ThreadLocalRandom.current().nextLong(1000 * 3600 * 24)); // 设置支付时间为当前时间之后一天内的随机时间
        order.setTimeStart(System.currentTimeMillis() + ThreadLocalRandom.current().nextLong(1000 * 3600 * 24)); // 设置开始时间为当前时间之后一天内的随机时间
        order.setTimeEnd(order.getTimeStart() + ThreadLocalRandom.current().nextLong(1000 * 3600 * 24)); // 设置结束时间为开始时间之后一天内的随机时间
        order.setTimeUpdate(System.currentTimeMillis()); // 设置更新时间为当前时间戳
        order.setUserIdUpdate(UUID.randomUUID().toString()); // 设置更新用户 ID 为随机 UUID
        order.setTimeSendOut(System.currentTimeMillis() + ThreadLocalRandom.current().nextLong(1000 * 3600 * 24)); // 设置发货时间为当前时间之后一天内的随机时间
        order.setTransactionId(UUID.randomUUID().toString()); // 生成随机的 UUID 作为交易 ID
        order.setPageSource(ThreadLocalRandom.current().nextInt(2)); // 随机生成页面来源（假设为 0 或 1）

        return order;
    }

    // 生成指定长度的随机字符串
    private static String generateRandomString(int length) {
        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = ThreadLocalRandom.current().nextInt(characters.length());
            sb.append(characters.charAt(index));
        }
        return sb.toString();
    }

}
